
print('-------------select--------------')
local function slt_test(...)
    local len = select('#', ...)
    for i=1,len do
        -- 只取第一个返回值
        local val = select(i, ...)
        print(val)
    end
end

slt_test(1,2,3,4,5)

print('-------------pack--------------')
local function pack_test(...)
    return table.pack(...)
end

local tbl = pack_test(1,2,3,4,5)
for i=1,5 do
    print(tbl[i])
end

print('-------------unpack--------------')
local function unpack_test(tbl0)
    print(table.unpack(tbl0))
end

unpack_test(tbl)

print('-------------func--------------')

local function func_out()
    local x = 0
    return function (y)
        x = x + 1
        print(x,y)
    end
end
-- 每次都会创建一个闭包
func_out()(1)
func_out()(2)
func_out()(3)

-- func_out的赋值操作会创建一个闭包
local func1 = func_out()
func1(1)
func1(2)
func1(3)

print('-------------myIpairs--------------')
local t1={11,22,33,nil,nil,44,55}

local function myIpairs(tab)
    local index=0
    local count=#tab
    return function()
        index = index+1
        if index <= count then
            ::FLAG::
            if tab[index] == nil then
                index = index+1
                goto FLAG
            end
            return index,tab[index]
        end
    end
end

for k,v in myIpairs(t1) do
    print(k,v);
end

